/*
 * 文件名：BasePO.java
 * 版权：MoonBox 
 * 修改人：Peter
 * 修改时间：2018年10月23日
 * 修改内容：新增
 */
package com.renzhebiao.lkang.base;

import java.io.Serializable;

import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.enums.IdType;

import lombok.Getter;
import lombok.Setter;

/**
 * <p>
 * 
 * @author Peter
 * @since 1.0.0
 */
@Getter
@Setter
@SuppressWarnings("serial")
public abstract class BasePO implements Serializable {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private Long createdId;

    private Long createdTime;

    private Long updatedId;

    private Long updatedTime;

    /**
     * 记录有效标示 1：有，2无
     */
    @TableLogic
    private Byte enabled;

    /**
     * 设置修改时间
     * 
     * @return this
     */
    public BasePO setUpdatedTime() {
        this.updatedTime = System.currentTimeMillis();
        return this;
    }

    /**
     * 设置创建时间
     * 
     * @return this
     */
    public BasePO setCreatedTime() {
        this.createdTime = System.currentTimeMillis();
        return this;
    }

    /**
     * 初始化所有扩展字段信息
     * 
     * @return BasePO
     */
    public BasePO allEx() {
        setUpdatedTime();
        setCreatedTime();
        this.createdId = 1L;
        this.updatedId = 1L;
        byte y = 1;
        this.enabled = y;
        return this;
    }

    /**
     * 初始化所有扩展字段信息
     * 
     * @param userId 用户ID
     * @return BasePO
     */
    public BasePO allEx(Long userId) {
        setUpdatedTime();
        setCreatedTime();
        setCreatedId(userId);
        setUpdatedId(userId);
        byte y = 1;
        this.enabled = y;
        return this;
    }

    /**
     * 初始化创建时间和修改时间
     * 
     * @return BasePO
     */
    public BasePO allTime() {
        setUpdatedTime();
        setCreatedTime();
        return this;
    }

    /**
     * 设置修改人和修改时间
     * 
     * @return this
     */
    public BasePO updated(Long userId) {
        setUpdatedTime();
        setUpdatedId(userId);
        return this;
    }

    /**
     * disable
     * 
     * @param userId
     */
    public BasePO disable(Long userId) {
        setUpdatedTime();
        setUpdatedId(userId);
        byte y = 2;
        this.enabled = y;
        return this;
    }
}
